#pragma once

#include "Descriptors.h"
#include "Device.h"
#include "GameObject.h"
#include "Renderer.h"
#include "Window.h"

#include <memory>
#include <vector>

namespace vkengine
{
	class Application
	{
	public:
		static constexpr int WIDTH = 800;
		static constexpr int HEIGHT = 600;

		Application();
		~Application();

		Application(const Application&) = delete;
		Application& operator=(const Application&) = delete;

		void Run();

	private:
		void LoadGameObjects();
		

	private:
		Window m_Window{ WIDTH,HEIGHT,"Hello Vulkan!" };
		Device m_Device{ m_Window };
	
		Renderer m_Renderer{ m_Window,m_Device };

		std::unique_ptr<DescriptorPool> m_GlobalPool{};
		GameObject::Map m_GameObjects;
	};
}